const MD5Utils = require('./encryption.js'); //加密模块引入
const checkUtils = require('./formatCheckUtils.js'); //格式校验模块引入
const config = require('../config.js') //全局配置文件

/**
 * 获取公共参数方法
 * url 请求url
 * parameter 私有参数
 */
function getCommonParameter(url, parameter) {
  //根据域名获取公共参数
  // if (startWith(url, configModule.baseUrl)) {
  let commonParametersTalentCard = {}//人才卡公共参数
  commonParametersTalentCard.token = 'token' //授权token,登录后需要传token，默认值：token
  commonParametersTalentCard.terminalType = 'weClient'
  commonParametersTalentCard.reqtime = checkUtils.formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss')
  //公共参数和私有参数对象合并
  commonParametersTalentCard = Object.assign({}, commonParametersTalentCard, parameter)
  //返回验签后的参数
  commonParametersTalentCard = Object.assign({}, commonParametersTalentCard, getSign(commonParametersTalentCard))
  //打印url
  console.log(urlEncode(url, commonParametersTalentCard))
  return commonParametersTalentCard
  // }
  // else if (startWith(url, baseFqurl)) { //baseUrlTalentCard 分期购公共参数
  //   var commonParametersByFqUrl = {
  //     platformId: "0757000002",
  //     channelId: "0757000002_100062",
  //     terminalId: "zhangwo",
  //     signMethod: "MD5",
  //     dataType: "json",
  //     version: "1.0.0"
  //   }
  //   commonParametersByFqUrl.reqtime = checkUtils.formatDate(new Date(), 'yyyy-MM-dd/HH:mm:ss');
  //   return commonParametersByFqUrl;
  // }
  // else {
  //   return null;
  // }
}

//验签方法
function getSign(obj) {
  var tmp = '';
  var tmpJson = {};
  //排序
  Object.keys(obj).sort().forEach(function (k) { tmpJson[k] = obj[k] });
  for (var item in tmpJson) {
    var jValue = tmpJson[item];//key所对应的value
    tmp = tmp + item + "=" + jValue + "&";
  }
  tmp = tmp + MD5Utils.md5(config.securityKey);
  return { sign: MD5Utils.md5(tmp) };
}

//url匹配公共参数
function startWith(str, prefix) {
  if (str == null) {
    return false;
  }
  // 第一次出现的位置, 如是-1则说明找不到
  if (str.indexOf(prefix) == -1) {
    return false;
  }
  return true;
}

/**
 * URL 请求链接的前缀
 * param 将要转为URL参数字符串的对象 
 * encode true/false 是否进行URL编码,默认为true 
 * encodeURIComponent(param[i])
 *  
 * return URL参数字符串 
 */
function urlEncode(url, param) {
  if (url == null) return '';
  if (param == null) return '';
  let paramStr = '';
  for (var i in param) {
    paramStr += '&' + i + '=' + param[i];
  }
  return url += '?' + paramStr.substring(1)
}

module.exports = { getCommonParameter }